package com.zqxq.lottery.util;

import cn.jiguang.common.resp.APIConnectionException;
import cn.jiguang.common.resp.APIRequestException;
import cn.jpush.api.JPushClient;
import cn.jpush.api.push.PushResult;
import cn.jpush.api.push.model.Message;
import cn.jpush.api.push.model.Options;
import cn.jpush.api.push.model.Platform;
import cn.jpush.api.push.model.PushPayload;
import cn.jpush.api.push.model.audience.Audience;
import cn.jpush.api.push.model.notification.AndroidNotification;
import cn.jpush.api.push.model.notification.IosNotification;
import cn.jpush.api.push.model.notification.Notification;
import cn.jpush.api.report.MessagesResult;
import cn.jpush.api.report.ReceivedsResult;
import com.alibaba.fastjson.JSONObject;
import com.zqxq.common.constant.Result;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 包      名：  com.jqyong.modules.yyjq.utils.push
 * 创 建 人：   寻欢
 * 创建时间：  2016/11/11 16:41
 * 修 改 人：
 * 修改日期：
 *
 * 极光推送 - 推送工具类
 */
@Slf4j
public class JPushUtil {
	protected static final Logger LOG = LoggerFactory.getLogger(JPushUtil.class);

	/**
	 * 配置appkey以及masterSecret
	 */
	private static String appKey = "cd5156b5d5881e5db02f09c3"; //11fcd3bd30471487c4d0e9e8
	private static String masterSecret = "02b21a43fa776f5fc031a490"; //b32a86ce992692b0417b8806

	static JPushClient jpushClient = new JPushClient(masterSecret, appKey, 3);
	private static String pushUrl = "https://bjapi.push.jiguang.cn/v3/push";
	private static Map<String,Object> headerMap = new HashMap<String, Object>(){{
		put("Authorization","Basic Y2UxZmViNDhiNDljNTE1ZDRhMWIzMzY5OjE4YzAwYjdkZDY5OWM5MjVjMWNlZDhmNw==");
		put("Content-Type","");
	}};


	/**
	 * 给单个指定用户推送消息 包含扩展信息
	 * @param alias
	 * @param message
	 * @param extraKey
	 * @param extraValue
	 * @return
	 */
	public static boolean pushToOne(String alias,String message,String extraKey,String extraValue){
		LOG.info("正在给"+alias+"推送信息。内容为："+message);
		boolean flag = false;
		try {
			PushPayload pushPayload = PushPayload.newBuilder()
					.setPlatform(Platform.android_ios())
					.setAudience(Audience.alias(alias))
					.setNotification(Notification.alert(message))
					.setMessage(Message.newBuilder().addExtra(extraKey,extraValue).build())
					.setNotification(Notification.newBuilder()
									.setAlert(message)
									.addPlatformNotification(AndroidNotification.newBuilder()
//									.addExtra("lockinfo", message)
													.build()
									)
									.addPlatformNotification(IosNotification.newBuilder()
//									.addExtra("lockinfo", message)
													.build()
									).build()
					).setOptions(Options.newBuilder()
							.setApnsProduction(false)//推送开发环境
							.build()
					)
					.build();
			PushResult pushResult = jpushClient.sendPush(pushPayload);

			flag = pushResult.isResultOK();//推送是否成功 - 成功为True
		}catch (Exception e){
			LOG.error("推送给 "+alias+" 的推送出现错误。错误信息："+e.getMessage());
			flag = false;
		}
		LOG.info("推送给 "+alias+" 的信息已完成。状态："+flag);
		return flag;
	}

	/**
	 * 用    于：	后端
	 * 方 法 名：	pushToOne
	 * 作    用：    给单个指定用户推送消息
	 * 创 建 人：	寻欢
	 * 创建时间：	2016/11/22 11:13
	 * 修 改 人：
	 * 修改日期：
	 */
	public static Map<String,Object> pushToOne(String alias,String message){
		LOG.info("正在给"+alias+"推送信息。内容为："+message);
		boolean flag = false;
		Long msgId = null;
		Map<String,Object> map = new HashMap();
		try {
			PushPayload pushPayload = PushPayload.newBuilder()
					.setPlatform(Platform.android_ios())
					.setAudience(Audience.alias(alias))
					.setNotification(Notification.alert(message))
					.setNotification(Notification.newBuilder()
							.setAlert(message)
							.addPlatformNotification(AndroidNotification.newBuilder()
//									.addExtra("lockinfo", message)
									.build()
							)
							.addPlatformNotification(IosNotification.newBuilder()
//									.addExtra("lockinfo", message)
									.build()
							).build()
					).setOptions(Options.newBuilder()
						.setApnsProduction(false)//推送开发环境
						.build()
					)
					.build();
			PushResult pushResult = jpushClient.sendPush(pushPayload);
			msgId = pushResult.msg_id;
			flag = pushResult.isResultOK();//推送是否成功 - 成功为True
		}catch (Exception e){
			LOG.error("推送给 "+alias+" 的推送出现错误。错误信息："+e.getMessage());
			flag = false;
		}
		LOG.info("推送给 "+alias+" 的信息已完成。状态："+flag);
		map.put("msgId",msgId);
		map.put("flag",flag);
		return map;
	}




	/**
	 * 用    于：	后端
	 * 方 法 名：	    pushToMore
	 * 作    用：    给指定用户推送消息
	 * 创 建 人：	    寻欢
	 * 创建时间：	    2016/11/15 下午5:35
	 * 修 改 人：
	 * 修改日期：
	 *
	 * @Pram alias:设备别名     message：推送内容
	 */

	public static boolean pushToMore(List<String> alias, String message){
		LOG.info("推送队列共有"+alias.size()+"个用户。推送内容为："+message);
		boolean flag = false;
		try {
			PushPayload pushPayload = PushPayload.newBuilder()
					.setPlatform(Platform.all())
					.setAudience(Audience.alias(alias))
					.setNotification(Notification.alert(message))
					.setOptions(Options.newBuilder()
							.setApnsProduction(true)
							.build()
					)
					.build();

			PushResult pushResult = jpushClient.sendPush(pushPayload);

			flag = pushResult.isResultOK();//推送是否成功 - 成功为True
		}catch (Exception e){
			LOG.error("推送给 "+alias+" 的推送出现错误。错误信息："+e.getMessage());
			flag = false;
		}
		return flag;
	}




	/**
	 * 用    于：	后端
	 * 方 法 名：	    pushToAll
	 * 作    用：    给所有用户推送消息
	 * 创 建 人：	    寻欢
	 * 创建时间：	    2016/11/15 下午5:35
	 * 修 改 人：
	 * 修改日期：
	 *
	 * @Pram message：推送内容
	 */
	public static Map<String,Object> pushToAll(String message){
		boolean flag = false;
		Long msgId = null;
		Map<String,Object> map = new HashMap();
		try {
			PushPayload pushPayload = PushPayload.alertAll(message);
			PushResult pushResult = jpushClient.sendPush(pushPayload);
			msgId = pushResult.msg_id;
			flag = pushResult.isResultOK();
		}catch (Exception e){
			log.error("推送失败：",e);
			flag = false;
		}
		map.put("msgId",msgId);
		map.put("flag",flag);
		return map;
	}
	public static void main(String[] args) {
		JPushUtil jPushUtil = new JPushUtil();
//		jPushUtil.appKey = "c4a78f86ee9d85a308d80b39";
//		jPushUtil.masterSecret = "d7fef2afef3241a0b7f29d38";
//		List<String> userList = new ArrayList();
//		userList.add("18223672897");
//		userList.add("18225001713");
//		LOG.info("多个别名推送测试："+pushToMore(userList,"告诉你们嗷。一元借钱最好用啦。n(*≧▽≦*)n"));
		Map b = JPushUtil.pushToOne("17774911175", "仅仅测试 哈哈哈哈");
		System.out.println(b.get("flag"));
//		LOG.info("单个别名推送测试："+jPushUtil.pushToOne("18723662318","消息推送测试"));
//		System.out.println("广播推送测试："+pushToAll("悟空单车感谢有你。。n(*≧▽≦*)n"));
	}

}
